﻿/*******************************************************************************
* file  : md5 demo
* creat : apleilx
* data  : 2017/03/02
* @brief  用于生成数据流摘要，验证数据流完整性，结果为16字节
*		堆栈无要求
*******************************************************************************/
#include "common.h"
#include "crc_ext.h"
#include "mbedtls/md5.h"

/*******************************************************************************
* @brief  md5_demo.
* \param[in] none
* \retval: none
*******************************************************************************/
void md5_demo(void)
{
	void * src , *out;
	mbedtls_md5_context *md5;
	
	dbg_print("\nmbed MD5 test :\n");
	
	// 请求内存
	src = malloc(200);
	out = malloc(32);
	md5 = malloc(sizeof(mbedtls_md5_context));
	
	// 开始
	mbedtls_md5_init(md5);
	mbedtls_md5_starts(md5);
	
	// 输入数据流，长度任意
	memcpy(src, &sinx2_0r5pi_2048_16384[32], 180);
	mbedtls_md5_update(md5, src, 180);
	
	// 输入数据流，长度任意
	memcpy(src, &sinx2_0r5pi_2048_16384[100], 180);
	mbedtls_md5_update(md5, src, 180);
	
	// 输出结果
	mbedtls_md5_finish(md5, out);
	
	mbedtls_md5_free(md5);
	
	// 显示
	dbg_u8_print("out : ", out, 16, 20);
	
	// mbedtls_md5 = init + start + update + finish + free
	mbedtls_md5(src, 180, out);
	
	// 释放内存
	free(src);
	free(out);
	free(md5);
}

